package com.atguigu.srb.core.controller.admin;


import com.atguigu.srb.base.result.ResponseEnum;
import com.atguigu.srb.base.result.ResponseVo;
import com.atguigu.srb.base.util.SrbAssert;
import com.atguigu.srb.core.pojo.entity.IntegralGrade;
import com.atguigu.srb.core.service.IntegralGradeService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

/**
 * <p>
 * 积分等级表 前端控制器
 * </p>
 *
 * @author Atguigu
 * @since 2024-10-11
 */
@RestController
//@CrossOrigin
@RequestMapping("/admin/core/integralGrade")
@Slf4j
@Api(tags = "积分等级管理模块")
public class AdminIntegralGradeController {

    /*
        后端接口:
            前端访问时 有成功、有异常、有失败
        后端接口响应:
            响应报文状态码都为200
            响应体中设置响应的数据:
                统一响应类对象转为ison:
                       状态码:code 0 代表成功，1代表失败，2代表sql错误 ，3代表参数错误
                       描述信息:message 描述状态码
                       响应数据:data 成功的响应数据
                统一响应类的失败状态码可以在后端定义好 响应时可以直接获取使用:可以使用常量类/枚举类 封装
            枚举类一个对象可以携带多个属性值
        统一响应类:以后响应时需要创建对象设置参数:
                ok()/error()/setResult()
     */

    @Autowired
    IntegralGradeService integralGradeService;

    @ApiOperation("查询所有的积分等级")
    @GetMapping
    public ResponseVo list(){
        log.info("{}级别日志,当前时间：{}","info",new Date());
        return ResponseVo.ok().data("item",integralGradeService.list());
    }


    @ApiOperation("分页查询积分等级")
    @GetMapping("{pageNum}/{pageSize}")
    public ResponseVo page(
            @PathVariable("pageNum")Long pageNum,
            @PathVariable("pageSize")Long pageSize
    ){
        return ResponseVo.ok().data("item",integralGradeService.page(new Page<>(pageNum,pageSize)));
    }


    @ApiOperation("根据id查询积分等级")
    @GetMapping("{id}")
    public ResponseVo getById(@PathVariable("id") Long id){
        IntegralGrade integralGrade = integralGradeService.getById(id);
        //数据查询失败
        if (integralGrade==null){
            return ResponseVo.setResult(ResponseEnum.DATA_NOT_EXISTS);
        }
        return ResponseVo.ok().data("item",integralGrade);
    }

    @ApiOperation("根据id删除积分等级")
    @DeleteMapping("{id}")
    public ResponseVo removeById(@PathVariable("id")Long id){
        boolean b = integralGradeService.removeById(id);
        return b?ResponseVo.ok():ResponseVo.setResult(ResponseEnum.ERROR);
    }

    @ApiOperation("根据id更新积分等级")
    @PutMapping
    public ResponseVo updateById(@RequestBody IntegralGrade integralGrade){
        //更新时integralGrade的id值不能为空
        SrbAssert.AssertNotNull(integralGrade.getId(),ResponseEnum.PARAM_NOT_NULL_ERROR);
        boolean b = integralGradeService.updateById(integralGrade);
        return b?ResponseVo.ok():ResponseVo.setResult(ResponseEnum.ERROR);
    }

    @ApiOperation("新增积分等级")
    @PostMapping
    public ResponseVo save(@RequestBody IntegralGrade integralGrade){
        boolean b = integralGradeService.save(integralGrade);
        return b?ResponseVo.ok():ResponseVo.setResult(ResponseEnum.ERROR);
    }
}

